#include <iostream>

#include "foptions.hpp"
#include "ftool.hpp"
#include "flexical.hpp"
#include "fsyntax.hpp"

#define debug

namespace fairy{
auto take_options(int argc, char *argv[]) -> void
{
    fairy::FLexical *lex;
    fairy::Fsyntax syn;

    auto is_option = [](char *_value){return *_value=='-' ? true : false;};
    auto get_option = [](char *_value){return *(_value+1);};
    if(argc <= 1)
    {
        #ifdef debug
        std::cout << "this is run" << std::endl;
        syn.display_first();
        syn.display_grammer();
        syn.display_terminator();
        syn.display_non_terminator();
        #endif
        //std::cout << "这里没有参数哇！  |･ω･｀)" << std::endl;
        return;
    }
    //在这个解释器中，如果无选项直接输入参数，则这个参数必须是文件名
    if(argc == 2 && !is_option(argv[1]))
    {
        //执行文件脚本内容
        #ifdef debug
        #endif
        return;
    }
    switch(get_option(argv[1])){
        //词法分析，不执行脚本
        case 'w':
        lex = new fairy::FLexical(argv[2]);
        lex->analysis();
        lex->display_data();
            break;
        //ll(1)语法分析, 不执行脚本
        case 'L':  
            //
            fcout("this is L ")
            break;
        //LR(1)语法分析，不执行脚本
        case 'l':
            fcout("this is l ")
            break;
        //帮助文档
        case 'h':
            fcout("this is l ")
            break;
        default:
            fcout("选项不对啊！•﹏•")
            fcout("建议你使用 -h 查看帮助 ( 。＿ 。） ✎ ＿")
    }
}
}